package graph.scenes;

import graph.Entities;
import graph.parts.Group;
import graph.parts.Light;

import java.util.List;

import ogl.app.Input;
import ogl.app.Texture;
import ogl.vecmath.Vector;
import ogl.vecmathimp.MatrixImp;
import shader.Shader;

public interface Scene {

	/**
	 * @return the root
	 */
	public Group getRoot();

	/**
	 * @param root
	 *            the root to set
	 */
	public void setRoot(Group root);

	/**
	 * @return the defaultShader
	 */
	public Shader getDefaultShader();

	/**
	 * @return the entities
	 */
	public Entities getEntities();

	/**
	 * @param entities
	 *            the entities to set
	 */
	public void setEntities(Entities entities);
	
	public void simulateAllEntities(float elapsed, Input input);
	
	public void switchCameras();
	
	void switchLight();

	public MatrixImp findCamera();
	
	public MatrixImp findLight();
	
	public void draw(MatrixImp m);
	
	public void drawSkybox(MatrixImp viewMatrix);
	
	public void buildSceneGraph();
	
	public List<Texture> getTextures();

	public void addTexture(Texture t);
	
	public Texture getDefaultTexture();
	
	public void addTime(float elapsed);

}
